AWS Trusted Advisor から EoL を迎える Lambda ランタイム情報を AWS CLI で取得してみた
Trusted Advisor に表示されている廃止されたランタイムを使用する AWS Lambda 関数の表になっている部分を AWS CLI で取得する機会がありました。AWS CLI から取得したい方のために成果物を共有します。アウトプットはマネージメントコンソールと同じ情報を CSV ファイルにしたものと、Markdown のテーブル形式に変換したファイルの 2 つです。
Trusted Advisor から EoL から迫る、すでにサポート切れの Lambda のランタイムを確認するメリットは、全リージョンの Lambda のランタイム情報をまとめて確認できる点ではないでしょうか。
マネージメントコンソールからの取得方法
最初に伝えたいことは AWS CLI を利用しなくてもマネージメントコンソールから右上のダウンロードボタンをクリックすると同じ情報を取得できます。
ダウンロードできたエクセルファイルを開くと、マネージメントコンソールに表示されている内容と同じ情報を取得できます。
ポチるだけで済ますのでこちらの方法もご検討ください。
AWS CLI で取得する方法
諸般の事情により AWS CLI から取得したくなりました。
準備
AWS Trusted Advisor API を利用します。サポートプランによる利用条件などは以下の記事をご確認ください。
当初は AWS CLI v1 のみサポートしていましたが、現在は AWS CLI v2 でも利用可能です。
$ aws --version aws-cli/2.15.45 Python/3.11.9 Darwin/22.6.0 source/arm64 prompt/off
リージョンの指定は執筆時点ではap-northeast-1
は非サポートのためus-east-1
にしています。
$ export AWS_DEFAULT_REGION="us-east-1" $ printenv AWS_DEFAULT_REGION us-east-1
主に使用するのは以下のコマンドです。実行結果をjq
でいい感じにしてファイルに保存する流れです。
$ aws trustedadvisor list-recommendations --pillar security --aws-service lambda $ aws trustedadvisor get-recommendation --recommendation-identifier [上記コマンドで取得したARN]
サンプルスクリプト
廃止されたランタイムを使用する AWS Lambda 関数(AWS Lambda Functions Using Deprecated Runtimes
)の結果に絞り ARN を取得し、詳細情報を取得できるコマンドに引き渡します。その実行結果からマネージメントコンソールの表示項目と同じ内容に絞り CSV ファイルとして保存します。CSV ファイルの内容を Markdown のテーブル形式に置き換えたファイルを作成します。
#!/bin/bash # Constants PILLAR="security" AWS_SERVICE="lambda" RECOMMENDATION_NAME="AWS Lambda Functions Using Deprecated Runtimes" FILE_NAME="LambdaRuntimes" # Functions get_recommendation_arns() { aws trustedadvisor list-recommendations --pillar $PILLAR --aws-service $AWS_SERVICE | jq -r '.recommendationSummaries[] | select(.name == "'"$RECOMMENDATION_NAME"'") | .arn' } # Get the list of recommendation ARNs arns=$(get_recommendation_arns) # Check if arns is empty if [ -z "$arns" ]; then echo "No recommendation ARNs found. Exiting." exit 0 fi # Create an empty array to store the CSV file names csv_files=() # Iterate over each ARN for arn in $arns; do # Extract the account ID and recommendation ID from the ARN account_id=$(echo $arn | cut -d':' -f5) recommendation_id=$(echo $arn | cut -d'/' -f2) # Generate the CSV file name in the desired format csv_file="${account_id}_TrustedAdvisor_${FILE_NAME}_${recommendation_id}.csv" # Run the AWS CLI command and process the output using jq, then save to the CSV file aws trustedadvisor list-recommendation-resources --recommendation-identifier $arn | jq -r '["ステータス", "リージョン", "関数ARN", "ランタイム", "非推奨となるまでの日数", "非推奨となる日", "1日あたりの平均呼び出し", "最終更新時刻"], (.recommendationResourceSummaries[] | [.metadata."0", .metadata."1", .metadata."2", .metadata."3", .metadata."4", .metadata."5", .metadata."6", .metadata."7"]) | @csv' > $csv_file # Add the CSV file name to the array csv_files+=($csv_file) done # Print the list of generated CSV files echo "Generated CSV files:" for file in "${csv_files[@]}"; do echo $file done # Convert each CSV file to a Markdown table and save as .md file for csv_file in "${csv_files[@]}"; do # Generate the corresponding .md file name md_file="${csv_file%.csv}.md" # Write the Markdown table to the .md file echo "| $(head -n 1 $csv_file | sed 's/,/ | /g') |" | sed 's/"//g' > $md_file echo "| --- | --- | --- | --- | --- | --- | --- | --- |" >> $md_file tail -n +2 $csv_file | sed 's/,/ | /g' | sed 's/^/| /' | sed 's/$/ |/' | sed 's/"//g' >> $md_file echo "Markdown table Converted: $md_file" done
実行結果
長いので全文は割愛しますが保存されたファイルを開くと以下の内容を確認できます。
CSV ファイル
CSV ファイルには以下の様な内容が保存されます。汎用性重視で保存するようにしました。
"ステータス","リージョン","関数ARN","ランタイム","非推奨となるまでの日数","非推奨となる日","1日あたりの平均呼び出し","最終更新時刻" "Red","ap-northeast-1","arn:aws:lambda:ap-northeast-1:123456789012:function:cwsyn-devio-990e838f-15e1-428d-b044-f96fac09737b:$LATEST","nodejs12.x","-404","03/31/2023","0.0","2024-05-08T00:00:00.000Z" "Red","ap-northeast-1","arn:aws:lambda:ap-northeast-1:123456789012:function:cwsyn-translate-api-3d3a1fb0-3d2b-4cd3-bbb5-c8e783a561a8:$LATEST","nodejs12.x","-404","03/31/2023","0.0","2024-05-08T00:00:00.000Z" "Red","ap-northeast-1","arn:aws:lambda:ap-northeast-1:123456789012:function:cwsyn-devio-18c5dc4d-40d7-4610-b3b9-2f1a4d7e3980:$LATEST","nodejs12.x","-404","03/31/2023","0.0","2024-05-08T00:00:00.000Z" "Red","ap-northeast-1","arn:aws:lambda:ap-northeast-1:123456789012:function:stopEC2instance:$LATEST","go1.x","-90","02/08/2024","0.0","2024-05-08T00:00:00.000Z" "Red","ap-northeast-1","arn:aws:lambda:ap-northeast-1:123456789012:function:chatbottest:$LATEST","go1.x","-90","02/08/2024","0.0","2024-05-08T00:00:00.000Z" "Red","ap-northeast-1","arn:aws:lambda:ap-northeast-1:123456789012:function:cwsyn-translate-api-d6470eaf-9403-4aaf-a4c4-ee92a0034633:$LATEST","nodejs12.x","-404","03/31/2023","0.0","2024-05-08T00:00:00.000Z" "Red","ap-northeast-1","arn:aws:lambda:ap-northeast-1:123456789012:function:cwsyn-infraya-bdfcd7df-532c-40a8-a5af-a0477d9c78e6:$LATEST","nodejs12.x","-404","03/31/2023","0.0","2024-05-08T00:00:00.000Z"
Markdown ファイル
Markdown ファイルの内容を貼り付けたものが以下です。基本的なコマンドだけで Markdown の表に変換しようと思えばできるものですね。
ステータス | リージョン | 関数ARN | ランタイム | 非推奨となるまでの日数 | 非推奨となる日 | 1日あたりの平均呼び出し | 最終更新時刻 |
---|---|---|---|---|---|---|---|
Red | ap-northeast-1 | arn:aws:lambda:ap-northeast-1:123456789012:function:cwsyn-devio-990e838f-15e1-428d-b044-f96fac09737b:$LATEST | nodejs12.x | -404 | 03/31/2023 | 0.0 | 2024-05-08T00:00:00.000Z |
Red | ap-northeast-1 | arn:aws:lambda:ap-northeast-1:123456789012:function:cwsyn-translate-api-3d3a1fb0-3d2b-4cd3-bbb5-c8e783a561a8:$LATEST | nodejs12.x | -404 | 03/31/2023 | 0.0 | 2024-05-08T00:00:00.000Z |
Red | ap-northeast-1 | arn:aws:lambda:ap-northeast-1:123456789012:function:cwsyn-devio-18c5dc4d-40d7-4610-b3b9-2f1a4d7e3980:$LATEST | nodejs12.x | -404 | 03/31/2023 | 0.0 | 2024-05-08T00:00:00.000Z |
Red | ap-northeast-1 | arn:aws:lambda:ap-northeast-1:123456789012:function:stopEC2instance:$LATEST | go1.x | -90 | 02/08/2024 | 0.0 | 2024-05-08T00:00:00.000Z |
Red | ap-northeast-1 | arn:aws:lambda:ap-northeast-1:123456789012:function:chatbottest:$LATEST | go1.x | -90 | 02/08/2024 | 0.0 | 2024-05-08T00:00:00.000Z |
Red | ap-northeast-1 | arn:aws:lambda:ap-northeast-1:123456789012:function:cwsyn-translate-api-d6470eaf-9403-4aaf-a4c4-ee92a0034633:$LATEST | nodejs12.x | -404 | 03/31/2023 | 0.0 | 2024-05-08T00:00:00.000Z |
Red | ap-northeast-1 | arn:aws:lambda:ap-northeast-1:123456789012:function:cwsyn-infraya-bdfcd7df-532c-40a8-a5af-a0477d9c78e6:$LATEST | nodejs12.x | -404 | 03/31/2023 | 0.0 | 2024-05-08T00:00:00.000Z |
まとめ
Trusted Advisor に表示されている廃止されたランタイムを使用する AWS Lambda 関数の情報を、AWS CLI を使用して取得する方法について紹介しました。マネージメントコンソールからダウンロードする方法も紹介しましたが、AWS CLI を使用してシンプルな CSV ファイルと Markdown 形式のテーブルに変換したファイルも生成できました。
おわりに
他の Trusted Advisor の情報を取得する際にも応用できるのではないでしょうか。ヘッダーはマネージメントコンソールを見て人力入力したものなので応用するときはヘッダー修正してください。また、Markdown のテーブルの 2 行目(| --- | --- |
)は決め打ちになっているので、ヘッダーのカラム数にあわせて調整してください。
CSV から Markdown のテーブル変換は基本的なコマンドだけで実現したく、Claude 3 Opus さんに相談したところ良い感じのコードを提案してくれました。修正は必要でしたが、私は微調整するだけのお仕事となり生成 AI さんと共に生きようと思いました。